// Package day_12_dp 2-198
// @Title day_12_dp
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/6 14:20
// @Create  2021/9/6 14:20
package day_12_dp

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

// RobI 打家劫舍
func RobI(nums []int) int {
	if nums == nil {
		return 0
	}
	// 创建DP数组，dp[i]对应的是 下标为i时候的最大收益和 这里DP数组很巧妙的使用了从1 开始，规避i-2的坑
	dpArr := make([]int, len(nums)+1)
	dpArr[1] = nums[0]
	for i := 2; i <= len(nums); i++ {
		dpArr[i] = max(dpArr[i-1], nums[i-1]+dpArr[i-2])
		//fmt.Println(i,dpArr)
	}
	return dpArr[len(dpArr)-1]
}

func RobIPlus(nums []int) int {
	if nums == nil {
		return 0
	}
	//
	var ans int
	pre2 := 0
	pre1 := 0
	for i := 0; i < len(nums); i++ {
		ans = max(pre2+nums[i], pre1)
		pre2, pre1 = pre1, ans
	}
	return ans
}
